<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1.原型继承
        // function Parent(){
        //     this.name='Parent'
        //     this.sex='boy'
        //     this.say=function(val){
        //         return val
        //     }
        // }

        // function Chid(){
        //     this.name='Child'
        // }
        // Chid.prototype=new Parent()
        // const a =new Chid()
        // var f = function () {
        //     return this;
        // };
        // console.log( f.call(5));
        function add(a, b) {
            return a + b;
        }

        //  // 3
        console.log(add.bind(this)(1,5));
        // 将子类的原型对象指向父类的实例
        // 优点： 继承了父类的模板，又继承了父类的原型对象
        // 缺点： 1.无法实现多继承(因为已经指定了原型对象了)
        //       2.创建子类时，无法向父类构造函数传参数


        // 2.构造函数继承
        // 在子类构造函数内部使用call或apply来调用父类构造函数，复制父类的实例属性给子类
        // function Parent (name){
        //     this.name=name
        // }
        // function Child(name){
            // 用.call 来改变Parent构造函数内的指向
            // Parent.call(this,name)
        // }
        // console.dir(Child);
        // console.log(Child('zhangshan'));
        // let a  =new Child('xiao')
        // console.log(a);

        // 3.组合继承
        // 将原型链继承与构造函数继承组合在一起
        // 优点使用原型链继承来保证子类能够继承到父类原型的属性和方法
        // 使用构造函数继承来保证子类能够继承到父类的属性和方法

        // 4.class继承
        // class Parent{
        //     constructor(name,age){
        //         this.name=name
        //         this.age=age
        //     }
        //     getName(){
        //         console.log(this.name)
        //     }
        // }
        // class Child extends Parent{
        //     constructor(name,age){
        //         super(name,age)
        //         this.sex='boy'
        //         // this.age=5
        //     }
        // }
        // // console.dir(Child)
        // let a =new Child('zhangshan',10)
        // console.log(a)
    </script>
</body>

</html>